#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"

#include <stdio.h>
#include <string.h>
#include "led.h"
#include "key.h"
#include "exit.h"
#include "uart.h"
#include "esptimer.h"

void app_main(void)
{
#pragma region LED

// esp_err_t nvs_err;

// nvs_err = nvs_flash_init();
// if (nvs_err == ESP_ERR_NVS_NO_FREE_PAGES ||
//     nvs_err == ESP_ERR_NVS_NEW_VERSION_FOUND)
// {
//     ESP_ERROR_CHECK(nvs_flash_erase());
//     ESP_ERROR_CHECK(nvs_flash_init());
// }
// led_init();

// while (1)
// {
//     LED_TOGGLE();
//     vTaskDelay(pdMS_TO_TICKS(1000));
// }
#pragma endregion

#pragma region KEY
    // esp_err_t err;
    // uint8_t mode=0;

    // err = nvs_flash_init();
    // if(err==ESP_ERR_NVS_NO_FREE_PAGES ||
    // err==ESP_ERR_NVS_NEW_VERSION_FOUND)
    // {
    //     ESP_ERROR_CHECK(nvs_flash_erase());
    //     ESP_ERROR_CHECK(nvs_flash_init());
    // }

    // led_init();
    // boot_init();

    // while(1)
    // {
    //     switch(boot_scan(mode))
    //     {
    //         case BOOT_PRES:
    //         {
    //             LED_TOGGLE();
    //             break;
    //         }
    //         case BOOT_LEFT:
    //         {
    //             break;
    //         }
    //         default:
    //         {
    //             break;
    //         }
    //     }
    //     vTaskDelay(pdMS_TO_TICKS(20));
    // }

#pragma endregion

#pragma region EXIT

    // esp_err_t err;

    // err=nvs_flash_init();
    // if(err==ESP_ERR_NVS_NO_FREE_PAGES||
    //     err==ESP_ERR_NVS_NEW_VERSION_FOUND)
    // {
    //     ESP_ERROR_CHECK(nvs_flash_erase());
    //     ESP_ERROR_CHECK(nvs_flash_init());
    // }

    // led_init();
    // exit_init();

    // while(1)
    // {
    //     vTaskDelay(pdMS_TO_TICKS(1000));
    // }
#pragma endregion

#pragma region UART

    // esp_err_t err;
    // uint32_t buadrate=115200;
    // uint32_t times=0;
    // uint32_t length=0;
    // char buffer[UART_BUFFER_SIZE]={0};

    // err = nvs_flash_init();
    // if (err == ESP_ERR_NVS_NO_FREE_PAGES ||
    //     err == ESP_ERR_NVS_NEW_VERSION_FOUND)
    // {
    //     ESP_ERROR_CHECK(nvs_flash_erase());
    //     ESP_ERROR_CHECK(nvs_flash_init());
    // }

    // led_init();
    // uart_init(buadrate);

    // while(1)
    // {
    //     uart_get_buffered_data_len(UART_UX,(size_t *)&length);
    //     if(length>0)
    //     {
    //         uart_read_bytes(UART_UX,buffer,length,100);
    //         printf("\n");
    //         printf("len:%"PRIu32"\n",length);
    //         uart_write_bytes(UART_UX,buffer,strlen(buffer));
    //         memset(buffer, 0, strlen(buffer));
    //     }
    //     else
    //     {
    //         times++;
    //         if(times%600==0)
    //         {
    //             printf("UART TEST\n");
    //         }
    //         if(times%300==0)
    //         {
    //             printf("HVP\n");
    //         }
    //         if(times%10==0)
    //         {
    //             LED_TOGGLE();
    //         }
    //         vTaskDelay(pdMS_TO_TICKS(100));
    //     }
    // }
#pragma endregion

#pragma region ESPTIMER

    esp_err_t err;
    err = nvs_flash_init();
    if (err == ESP_ERR_NVS_NO_FREE_PAGES ||
        err == ESP_ERR_NVS_NEW_VERSION_FOUND)
    {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ESP_ERROR_CHECK(nvs_flash_init());
    }

    led_init();
    esptimer_init(1000000);

    while(1)
    {
        vTaskDelay(pdMS_TO_TICKS(10));
    }

#pragma endregion
}
